package pe.edu.upc.dew.pharma.controller;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pe.edu.upc.dew.pharma.model.PedidoCab;
import pe.edu.upc.dew.pharma.model.Usuario;
import pe.edu.upc.dew.pharma.service.ProductoService;
import pe.edu.upc.dew.pharma.service.UsuarioService;
import pe.edu.upc.dew.pharma.util.Constante;

@Controller
public class LoginController extends BaseController
{
	private static final Log logger = LogFactory.getLog(LoginController.class);
	private static final String PAGE_LOGIN = "login";
	private static final String PAGE_PRODUCTOS = "Productos";
	private static final String PAGE_REQUEST_SENT = "viewRequestSent";
	@Autowired
	private UsuarioService usuarioService;
	
	@Autowired
	private ProductoService productoService;
	
	@Autowired
	private LogisticaController logisticaController;
	
	@RequestMapping(Constante.REQUEST_LOGIN)
	public ModelAndView login(HttpServletRequest request, @ModelAttribute("usuario") Usuario usuarioSesion)
	{
		HttpSession session = request.getSession(true);
		
		usuarioSesion = usuarioService.login(usuarioSesion);
		
		if(usuarioSesion.getIdUsuario() != 0)
		{
			session.setAttribute("usuarioSesion", usuarioSesion);
			if(logger.isDebugEnabled()){
				logger.debug("Login " + usuarioSesion.getNombre());
			}
			if("L".equals(usuarioSesion.getTipo()))
			{
				return logisticaController.iniciarDespachoPedido();
			}
		}
		else
		{
			request.setAttribute("mensaje", "Usuario y/o contrase�a invalida");
			return new ModelAndView(PAGE_LOGIN);
		}
		
		
		
		return getProductos(request);
	}
	
	@RequestMapping(Constante.REQUEST_LOGOUT)
	public ModelAndView logout(HttpServletRequest request)
	{
		HttpSession session = request.getSession(false);
		session.removeAttribute("usuarioSesion");
		session.removeAttribute(Constante.SES_PEDIDO);
		session.removeAttribute("detalle");
		if(logger.isDebugEnabled()){
			logger.debug("Logout:existe.usuarioSesion: " + session.getAttribute("usuarioSesion"));
		}
		
		return getProductos(request);
	}
	
	public ModelAndView getProductos(HttpServletRequest request)
	{
		HttpSession session = request.getSession(true);
		PedidoCab pedido = (PedidoCab) session.getAttribute(Constante.SES_PEDIDO);
		
		String cantidadPedida = (String) session.getAttribute("cantidadPedida");
		if (cantidadPedida != null){
			session.removeAttribute("cantidadPedida");
			return new ModelAndView(PAGE_REQUEST_SENT);
			
		}
		
		request.setAttribute("listaProductos", productoService.listarProductos());
		request.setAttribute("listaProductosOfertados", productoService.listarProductosOfertados());
		
		if(logger.isDebugEnabled())
		{
			logger.debug("listados de productos cargados");
		}
		
		
		return new ModelAndView(PAGE_PRODUCTOS);
	}
}
